package cn.tedu.Innerclass;

import com.sun.org.apache.bcel.internal.generic.NEW;
import org.junit.jupiter.api.Test;

import java.util.concurrent.Executor;

/*本类用来测试内部类的入门案例*/
public class TestInner1 {
    @Test
    public void test(){
        //3.创建内部类对象，使用内部类资源
        /*外部类名.内部类名 对象名=new外部类对象().new内部类对象()*/
        new Outer().find();
        Outer.Inner inner = new Outer().new Inner();
        inner.delete();
        System.out.println(inner.sum);
        //创建匿名内部类对象
        new Outer().new Inner();

    }
}
//创建外部类
class Outer{
    String name;
    private int age;

    public void find(){
        //测试外部类可以使用内部类的资源
       // System.out.println(sum);//不能使用内部类的资源
        /*外部类如果想要使用内部类的 必须先创建内部类的资源
        * 通过内部类对象调用内部类的资源*/
        Inner inner = new Inner();
        System.out.println(inner.sum);
        inner.delete();
        System.out.println("Outer *****find()");
    }
    //2.外部类的一个特殊成员
    /*成员内部类 类里方法外
    * 局部内部类  方法里*/

    class Inner{
        //2.1定义内部类成员变量
        int sum=10;
        //2.2定义内部类方法
        public void delete(){
            System.out.println("Inner*Delete*Successful");
            //5.测试内部类是否可以使用外部类的资源
            /*内部类可以直接使用外部类的资源 包括私有资源*/
            System.out.println(name+"\t\t"+age);
           // find();//StackOverflowError
            /*此处测试完需要注释掉
            * 否则来回调用会抛出栈溢出异常*/
        }

    }
}
